package mx.com.switz.dao.Impl;

import java.util.List;
import javax.sql.DataSource;
import mx.com.switz.dao.EmpresaDao;
import mx.com.switz.dto.Empresa;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class EmpresaDaoImpl extends JdbcDaoSupport implements EmpresaDao {

    private SimpleJdbcInsert simpleJdbcInsert;
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    @Autowired
    public EmpresaDaoImpl(DataSource dataSource) {

        setDataSource(dataSource);
        simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate().getDataSource()).withTableName("empresa");
        this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    }
    private static final String SQL_UPDATE_EMPRESA = "UPDATE empresa set nombre = :nombre,email = :email,statusPago = :statusPago,contrasena = :contrasena WHERE clave =:clave";
    private static final String SQL_DELETE_EMPRESA = "DELETE FROM empresa WHERE clave = :clave";
    private static final String SQL_SELECT_EMPRESA = "SELECT clave, nombre,email,statusPago,contrasena FROM empresa";
    private static final String SQL_SELECT_EMPRESA_BY_NOMBRE = SQL_SELECT_EMPRESA + " WHERE nombre = :nombre";

    @Override
    public void insertEmpresa(Empresa empresa) {
        SqlParameterSource parameters = new BeanPropertySqlParameterSource(empresa);
        simpleJdbcInsert.execute(parameters);
    }

    @Override
    public void updateEmpresa(Empresa empresa) {
        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(
                empresa);
        this.namedParameterJdbcTemplate.update(SQL_UPDATE_EMPRESA,
                parameterSource);
    }

    @Override
    public void deleteEmpresa(Empresa empresa) {
        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(empresa);
        this.namedParameterJdbcTemplate.update(SQL_DELETE_EMPRESA, parameterSource);
    }

    @Override
    public List selectEmpresaByNombre(Empresa empresa) {
        String query = SQL_SELECT_EMPRESA_BY_NOMBRE;
        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(empresa);
        return namedParameterJdbcTemplate.query(query, parameterSource, ParameterizedBeanPropertyRowMapper.newInstance(Empresa.class));

    }

    @Override
    public List<Empresa> findAllEmpresas() {
        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(Empresa.class);
        return namedParameterJdbcTemplate.query(SQL_SELECT_EMPRESA, parameterSource, ParameterizedBeanPropertyRowMapper.newInstance(Empresa.class));
    }
}
